home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / archivrs / general / lhasrc.exe / LARC_.ASM < prev    next >
Assembly Source File  |  1991-03-03  |  2KB  |  162 lines

  1. ;***********************************************
  2. ;    larc_.asm -- extract *.lzs
  3. ;***********************************************
  4.             page    0, 128
  5.  
  6. include    amscls.inc
  7. $_init    GEN
  8.  
  9.  
  10. CGROUP    GROUP    TEXT
  11. DGROUP    GROUP    DATA,BSS
  12.  
  13. TEXT    segment byte public 'CODE'
  14.     assume    cs:CGROUP, ds:DGROUP, ss:DGROUP
  15. TEXT    ends
  16.  
  17. DATA    segment byte public 'DATA'
  18. DATA    ends
  19.  
  20. BSS    segment byte public 'DATA'
  21. MAGIC0        =        18
  22. MAGIC5        =        19
  23.  
  24. flag_        db        1 dup (?)
  25. flagcnt_    db        1 dup (?)
  26. matchpos_    dw        1 dup (?)
  27. BSS    ends
  28.  
  29. TEXT    segment byte public 'CODE'
  30.     assume    cs:CGROUP, ds:DGROUP, ss:DGROUP
  31. ;
  32. ;ushort decode_c_lzs(void)
  33. ;
  34.  
  35.     public    decode_c_lzs_
  36. decode_c_lzs_:        
  37.     mov        al,1
  38.     call    getbits_
  39.     $_if <test    ax, ax>, NZ
  40.         mov        al, 8
  41.         jmp        getbits_
  42.     $_endif
  43.     mov        al, 11
  44.     call    getbits_
  45.     mov        matchpos_, ax
  46.     mov        al, 4
  47.     call    getbits_
  48.     add        ax, 256
  49.     ret
  50.  
  51.  
  52. ;
  53. ;ushort decode_p_lzs(int loc)
  54. ;
  55.  
  56.     public    decode_p_lzs_
  57. decode_p_lzs_:        
  58.     sub        ax, matchpos_
  59.     sub        ax, MAGIC0
  60.     and        ax, 07ffh
  61.     ret
  62.  
  63.  
  64. ;
  65. ;void decode_start_lzs(void)
  66. ;
  67.  
  68.     public    decode_start_lzs_
  69. decode_start_lzs_:        
  70.     jmp        init_getbits_
  71.  
  72.  
  73. ;
  74. ;ushort decode_c_lz5(void)
  75. ;
  76.  
  77.     public    decode_c_lz5_
  78. decode_c_lz5_:        
  79.     $_if <dec flagcnt_>, S
  80.         mov        flagcnt_, 7
  81.         mov        ax, infile_
  82.         call    fgetc_
  83.         mov        flag_, al
  84.     $_endif
  85.     mov        ax,    infile_
  86.     call    fgetc_
  87.     $_if <shr flag_, 1>, NC
  88.         mov        matchpos_, ax
  89.         mov        ax, infile_
  90.         call    fgetc_
  91.         mov        bx, ax
  92.         and        bx, 0f0h
  93.         shl        bx, 1
  94.         shl        bx, 1
  95.         shl        bx, 1
  96.         shl        bx, 1
  97.         add        matchpos_, bx
  98.         and        ax, 0fh
  99.         add        ax, 100h
  100.     $_endif
  101.     ret
  102.  
  103.  
  104. ;
  105. ;ushort decode_p_lz5(int loc)
  106. ;
  107.  
  108.     public    decode_p_lz5_
  109. decode_p_lz5_:        
  110.     sub        ax, word ptr DGROUP:[matchpos_]
  111.     sub        ax, MAGIC5
  112.     and        ax, 0fffh
  113.     ret
  114.  
  115.  
  116. ;
  117. ;void decode_start_lz5(void)
  118. ;
  119.  
  120.     public    decode_start_lz5_
  121. decode_start_lz5_:        
  122.     push    cx
  123.     push    di
  124.     xor        ax, ax
  125.     mov        flagcnt_, al
  126.     push    ds
  127.     pop        es
  128.     cld
  129.     mov        di, offset DGROUP:text_ + 3000h + 18
  130.     mov        ch, al
  131.     $_do
  132.         mov        cl, 13
  133.         rep        stosb
  134.     $_until <inc al>, Z
  135.     $_do
  136.         stosb
  137.     $_until <inc al>, Z
  138.     $_do
  139.         dec        al
  140.         stosb
  141.     $_until , Z
  142.     mov        cx, 128
  143.     rep        stosb
  144.     mov        cx, 128 - 18
  145.     mov        al, ' '
  146.     rep        stosb
  147.     pop        di
  148.     pop        cx
  149.     RET    
  150.  
  151.     EXTRN    getbits_:near
  152.     EXTRN    init_getbits_:near
  153.     EXTRN    memset_:near
  154.     EXTRN    fgetc_:near
  155.  
  156. TEXT    ends
  157.  
  158.     EXTRN    text_:byte
  159.     EXTRN    infile_:word
  160.  
  161.     END
  162.